<?php
/*
*Author:GAZEON
*Date:2017-10-3
*替换核心加密文件程序
*请将文件所在文件夹放到shopex根目录。再运行此程序
*替换后可删除此文件夹
*/

$cwd=getcwd();
$root=$cwd.DIRECTORY_SEPARATOR;
$shopex=substr($cwd,0,strrpos($cwd,DIRECTORY_SEPARATOR)+1);

if(!is_dir($shopex))
	die('<h1>请将文件夹放在shopex根目录再运行</h1>');

if(is_file($shopex.'config/RPLOCK'))
	die('<h1>文件已被替换完毕，请勿重复替换</h1><p>如果你想重新替换，请先删除shopex的config目录下的RPLOCK文件</p>');

if(!is_dir($shopex.'core'))
	die('<h1>请检查shopex core文件夹是否存在</h1>');

if(!is_dir($root.'fullcode_last'))
	die('<h1>请检查本程序fullcode_last文件夹是否存在</h1>');

if(!is_dir($root.'update'))
	die('<h1>请检本程序update文件夹是否存在</h1>');

if(!is_dir($root.'view'))
	die('<h1>请检本程序view文件夹是否存在</h1>');


$huancai=$shopex.'/home/tmp/huancai';
if(is_file($root.'/huancai.tar.gz'))
{
	if(!is_dir($huancai))
	{
		if(!mkdir($huancai,0777,true))
			streamout('新建'.$huancai.'目录失败<br/>');
	}
	touch($huancai.'/huancai.tar.gz');
	if(copy($root.'/huancai.tar.gz',$huancai.'/huancai.tar.gz'))
		streamout('模板复制成功<br/>');
	else
		streamout('模板复制失败<br/>');		
}
else
	streamout('模板文件不存在，跳过<br/>');			

replacefiles($root.'fullcode_last',$shopex.'core');
replacefiles($root.'update',$shopex);
replacefiles($root.'view',$shopex,FALSE);

die('<h1>=========所有文件替换完毕==========</h1>');






























































touch($shopex.'config/RPLOCK');
file_put_contents($shopex.'config/RPLOCK',"/***CRACK***BY***GAZEON***/\r\n解密文件于:".date('Y-m-d H:i:s').'被替换',LOCK_EX);




/****************************************************************************************************************/

function streamout($str)
{
    echo str_repeat(' ',4096);
    ob_flush();
    flush();
    echo $str;
}

/*
	获取文件列表
*/
function getfilelist($dir,$pathmode=false,$base_dir='')
{	
	$dir=trim(str_replace('\\','/',$dir),'/');
	if(empty($base_dir))
		$base_dir=$dir;
	
	$filelist=array();
	$fh=opendir($dir);
	while($item=readdir($fh))
	{
		if($item=='.'||$item=='..')
			continue;
		
		$fullname=$dir.'/'.$item;
		if(is_file($fullname))
		{	
			if($pathmode==1)
				$item=$fullname;
			else if($pathmode==2)
			{
				$item=basename($dir).'/'.str_replace($base_dir,'',$dir).$item;
			}
			$filelist[]=$item;
			//var_dump($filelist);
		}
		if(is_dir($fullname))
			$filelist=array_merge($filelist,getfilelist($fullname,$pathmode,$base_dir));
	}
	closedir($fh);
	return $filelist;
}



/*
	替换加密文件
*/
function replacefiles($fromdir,$todir,$mustphp=TRUE)
{
	$fromdir=trim(str_replace('\\','/',$fromdir),'/').'/';
	$todir=trim(str_replace('\\','/',$todir),'/').'/';
	
	$filelist=getfilelist($fromdir,1);

	foreach($filelist as $file)
	{
		if(is_file($file))
		{
			$tofile=$todir.str_replace(array($fromdir,'-'),array('','/'),$file);
			
			if(is_file($tofile))
			{
				if($mustphp&&strtolower(pathinfo($tofile,PATHINFO_EXTENSION))!='php')
					continue;
				
				/*
				$ifh=fopen($tofile,'r');
				$_head=fgets($ifh,5);
				fclose($ifh);
				streamout('替换: '.$tofile.' : ,来自:'.$file.'....');
				if($_head=='Zend')
					*/
				streamout('替换: '.$tofile.' : ,来自:'.$file.'....');
				//{
					if(file_put_contents($tofile,file_get_contents($file),LOCK_EX))
						streamout('成功<br/>');
		
					else
						streamout('写入文件时出错<br/>');
				
			}
			
		}
	}
}







?>